home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <sys/dos.h>
- #include <sys/iocs.h>
- #include <alloca.h>
- #include <time.h>
- #include <utime.h>
- #include <conio.h>
-
- #include <network.h>
- #include <socket.h>
- #include "RoboGet.h"
- #include "WebCache/WebCache.h"
- #include "FuncUrl/FuncUrl.h"
-
-
- extern void Date2Date (char *, struct tm *);
- extern int GetFileInit (void);
- extern int GetFile (HTTPFILE *);
- extern void McPrint (char *);
- extern void McDbPrint (char *);
-
-
- /* âoâOé┴é─éαÄÇé╚é╚éóéµéñé╔ÄwÆΦé╖éΘÉöÆlé╔é═ù]ùTé≡Ä¥é╜é╣éΘüié▒é╠ÉöÆlé╔ì¬ïÆû│é╡üj */
- #define YOYUU 1024
- /* -f âIâvâVâçâôÅëè·Æl */
- #define F_OPTION 32
-
- /* URL é╠èKæwì\æóé≡ò█Ä¥ */
- typedef struct _url_nest {
- struct _url_nest *before_ptr; /* âèâXâgì\æó */
- struct _url_nest *next_ptr;
- char url[256];
- } URL_NEST;
-
- /* èKæwì\æóÅεò± */
- typedef struct {
- URL_NEST *url_nest_top;
- URL_NEST *url_nest_end;
- } NEST_INFO;
-
-
- unsigned char quit_flag = QUIT_NON;
-
- int v_option = 0;
- int f_option = F_OPTION;
- int f_option_left;
- unsigned char getfile_mode = GETFILE_CACHEHTMLONLY;
-
- extern char cachedir[];
- NEST_INFO nest_info =
- {NULL, NULL};
-
- int _stacksize = 32 * 1024;
- int _heapsize = 256 * 1024;
-
- void usage (void)
- {
- printf ("WWW Ä⌐ô«Åäë±â\âtâg RoboGet.X ver0.10\n"
- " programmed by Mitsuky <FreeSoftware>\n"
- "URL é┼ÄwÆΦé│éΩé╜âtâ@âCâïé≡â_âEâôâìü[âhé╡é▄é╖üBì─ïAôIé╔â_âEâôé╖éΘÄûé¬ë┬ö\é┼é╖üB\n"
- "Ägùpû@ : RoboGet [option] URL..."
- "[option]\n"
- "-fÉöÆl : ÄwÆΦé╡é╜âtâ@âCâïÉöé▓é╞é╔ WebCache.env é≡ò█æ╢é╖éΘüiâfâtâHâïâg = 32üj\n"
- "-rÉöÆl : ì─ïAÉöüiâfâtâHâïâg = 0 : ì─ïAé╡é╚éóüj\n"
- " ÉöÆlé≡Å╚ù¬é╡é╜ÅΩìçé═ -r1 é╞î⌐é╚é╡é▄é╖\n"
- "-v : Å┌ì╫ò\ĪüiâfâoâbâOùpüj\n"
- "URLé═òíÉöÄwÆΦé┼é½é▄é╖\n");
- }
-
-
- /* ûûö÷é╠âmü[âhé≡ìφÅ£é╖éΘ */
- void DeleteNode (URL_NEST ** url_nest_top, URL_NEST ** url_nest_end)
- {
- if ((*url_nest_end)->before_ptr == NULL) {
- /* éPé┬é╡é⌐é╚éóâmü[âhé≡ìφÅ£é╖éΘ */
- free (*url_nest_end);
- *url_nest_top = NULL;
- *url_nest_end = NULL;
- } else {
- URL_NEST *t_ptr = *url_nest_end;
- ((*url_nest_end)->before_ptr)->next_ptr = NULL;
- *url_nest_end = (*url_nest_end)->before_ptr;
- free (t_ptr);
- }
- }
-
-
- /* ûûö÷é╔âmü[âhé≡éPé┬Æ╟ë┴é╖éΘ */
- int InsertNode (char *url, URL_NEST ** url_nest_top, URL_NEST ** url_nest_end)
- {
- URL_NEST *i_ptr, *t_ptr;
- if ((i_ptr = malloc (sizeof (URL_NEST))) == NULL) {
- printf ("âüâéâèé¬æ½éΦé▄é╣é±\n");
- return (-1);
- } else {
- if (*url_nest_top == NULL) {
- /* âmü[âhéOî┬é╠Åèé╔Æ╟ë┴ */
- *url_nest_top = i_ptr;
- *url_nest_end = i_ptr;
- i_ptr->before_ptr = NULL;
- i_ptr->next_ptr = NULL;
- strcpy (i_ptr->url, url);
- } else {
- /* ûûö÷é╔âmü[âhé≡Æ╟ë┴ */
- (*url_nest_end)->next_ptr = i_ptr;
- i_ptr->before_ptr = *url_nest_end;
- i_ptr->next_ptr = NULL;
- strcpy (i_ptr->url, url);
- *url_nest_end = i_ptr;
- }
- }
- t_ptr = *url_nest_top;
-
- return (0);
- }
-
-
- void McPrint (char *s)
- {
- printf ("%s", s);
- }
-
-
- void McDbPrint (char *s)
- {
- // printf ("%s", s);
- }
-
-
- void McCursorTop (void)
- {
- printf ("\n\x1bM\x1b[2K");
- }
-
-
-
- char QuitCheck (void)
- {
- char r = QUIT_NON;
- if (_iocs_bitsns (0) & 0b10) { /* [ESC] âLü[ */
- r = QUIT_ABORT;
- _dos_kflushio (0xff); /* âLü[âoâbâtâ@é≡âNâèâA */
- }
- if (_iocs_bitsns (0x0c) & 0b10) { /* [BREAK] âLü[ */
- r = QUIT_EXIT;
- _dos_kflushio (0xff); /* âLü[âoâbâtâ@é≡âNâèâA */
- }
- return (r);
- }
-
-
-
- /* URL é┼ÄwÆΦé╡é╜âtâ@âCâïé≡ì─ïAôIé╔ĵé┴é─é¡éΘ */
- void GetFileRecursive (char *url, int r_option)
- {
- char scheme[256], hostname[256], path[256], fname[256], query[256], anchor[256];
- int port;
- char temp_str[256];
- char *r;
- /* ɵô¬é╔ http:// é≡Æ╟ë┴üA'../'ôÖÅêù¥ì╧é▌üAquery é≡ìφÅ£é╡é╜ URL */
- char temp_url[256];
- HTTPFILE *httpfile;
-
- if (quit_flag != QUIT_NON)
- return;
-
- printf ("%s é╠Ä≤ÉMé≡èJÄné╡é▄é╖\n", url);
-
- httpfile = alloca (sizeof (HTTPFILE));
- httpfile->content = NULL;
-
- UrlSplit (url, scheme, hostname, path, fname, query, anchor, &port);
- UrlCat (temp_url, scheme, hostname, path, fname, query, "", port);
- strcpy (httpfile->url, temp_url);
-
- if (GetFile (httpfile) < 0)
- return;
-
- /* HTML é≡ë≡É═é╡é─ì─ïAôIé╔â_âEâô */
- if ((httpfile->content) && (r_option) && (!strcmp (httpfile->content_type, "text/html"))) {
- r = httpfile->content;
-
- InsertNode (temp_url, &(nest_info.url_nest_top), &(nest_info.url_nest_end));
- while ((r < (char *) (httpfile->content + httpfile->content_length)) && (quit_flag == QUIT_NON)) {
- if (*r++ == '<') {
- if ((!strnicmp (r, "A HREF", 6))
- || (!strnicmp (r, "IMG SRC", 7))
- || (!strnicmp (r, "FRAME SRC", 9))) {
- char temp_str2[256], *r1 = r, *r2 = temp_str2;
- URL_NEST *t_ptr;
- char nest_match;
-
- while (*r1++ != '"');
- if (!strnicmp (r1, "mailto:", 7))
- continue;
- while ((*r2++ = *r1++) != '"');
- *(r2 - 1) = '\0';
- r = r1;
- UrlCat (temp_str, scheme, hostname, path, temp_str2, query, "", port);
-
- /* ì─ïAɵé¬Éeé╛é┴é╜éτì─ïAé╡é╚éóüiühû▀éΘühâ{â^âôé╔æ╬ë₧üj */
- nest_match = 0;
- if ((t_ptr = (nest_info.url_nest_top)) != NULL) {
- do {
- if (!stricmp (temp_str, t_ptr->url)) {
- nest_match = !0;
- break;
- }
- } while ((t_ptr = t_ptr->next_ptr) != NULL);
- }
- if (!nest_match) {
- GetFileRecursive (temp_str, r_option - 1);
- if (quit_flag == QUIT_ABORT)
- quit_flag = QUIT_NON;
- } else {
- printf (" ì─ïAɵé¬Éeâtâ@âCâïé┼é╖ : ì─ïAé╡é▄é╣é±\n");
- }
- }
- }
- }
- DeleteNode (&(nest_info.url_nest_top), &(nest_info.url_nest_end));
- }
- if (httpfile->content != NULL)
- _dos_mfree (httpfile->content);
-
- return;
- }
-
-
-
- int main (int argc, char *argv[])
- {
- int i;
- int slash_flag = 0;
- int url_found_flag = 0; /* âtâ@âCâïû╝é¬éPé┬é┼éαéáé┴é╜é⌐ */
- int r_option = 0; /* ì─ïAÉö */
- int inetd_version;
-
- {
- char *temp;
-
- temp = getenv ("SLASH");
- if ((temp != NULL) && (*temp == '/')) {
- slash_flag = 1;
- }
- }
- WCInit ();
- _dos_breakck (2); /* BREAK â`âFâbâNé≡ÄEé╖ */
- inetd_version = _get_version ();
-
- for (i = 1; i < argc; i++) {
- if (('-' == *argv[i]) || ((slash_flag == 0) && ('/' == *argv[i]))) {
- switch (*(argv[i] + 1)) {
-
- case 'f':
- case 'F':
- sscanf (argv[i] + 2, "%d", &f_option);
- break;
-
- case 'r':
- case 'R':
- sscanf (argv[i] + 2, "%d", &r_option);
- if (!r_option)
- r_option = 1;
- break;
-
- case 'v':
- case 'V':
- v_option = !0;
- break;
-
- default:
- usage ();
- return (-1);
- }
- } else {
- url_found_flag = 1;
- f_option_left = f_option;
- if (inetd_version < 0) {
- printf ("TCP/IP âhâëâCâoé¬ÅφÆôé╡é─éóé▄é╣é±üB\n");
- break;
- } else {
- GetFileRecursive (argv[i], r_option);
- }
- }
- }
-
- if (url_found_flag == 0) {
- usage ();
- return (-1);
- }
- WCTini ();
- _dos_kflushio (0xff); /* âLü[âoâbâtâ@é≡âNâèâA */
-
- return (0);
- }
-